home *** CD-ROM | disk | FTP | other *** search
/ Mac-Source 1994 July / Mac-Source_July_1994.iso / C and C++ / Libraries / ExceptionHandler-C-src / MyExceptionHandler.h < prev    next >
Text File  |  1990-09-03  |  3KB  |  69 lines

  1. /************************************************************************
  2.  
  3.     By R. Mark Fleming                    Think C V3.02 Signal Routines....
  4.         
  5.     EMail:    flemingm@QUCDN.QueensU.CA
  6.     Phone:    (613) 545-9732 (h), (613) 545-2039 (w)
  7.     SMail:    521 Albert Street
  8.             Kingston, Ont.
  9.             Canada, K7K 4M5
  10.             
  11.     Description:    This is modelled after Apple's MPW's exception handler/
  12.                     Signals routines that are in sample code...
  13.                     
  14.     Note: I have uses the same Prototyping as Apple routines (in fact they
  15.             are a copy of apple's prototype def's).
  16.     
  17.     Creation Date:    January 31, 1990
  18.     
  19.     special note:
  20.     I have not tested these routines very well, but they did work to 
  21.     compile Apple's "AppleTalk GetZoneList Sample Application", so use at
  22.     your own risk...
  23.     
  24.     You may use, modify and redistribute BUT NOT SELL this code provided
  25.     that all changes/bug fixes are returned to the author for inclusion.
  26.  
  27. ************************************************************************/
  28.  
  29. typedef struct {
  30.     long            regs[11];            /* D3-D7/A2-A7 */
  31.     short            error;
  32.     long            message;
  33.     long            failA6;
  34.     long            failPC;
  35.     Ptr                nextInfo;        /* Handler */
  36.     long            whoPC;            /* Next FI structure */
  37.     short            whatSignals;
  38.     /* this is used to keep the old stack frame return address */
  39.     long            sigFRet;
  40. } FailInfo, *PFailInfo;
  41.  
  42. /* Call the following initialization routine before your other initializations (InitGraf, etc.)-
  43.  in other words as early as you can in the application. */
  44.  
  45. extern pascal void InitUFailure();
  46. /* Allocates the heap block for CatchSignals and initializes the global
  47.     variables used by the unit. C programs must use this instead of InitSignals. */
  48.         
  49. extern pascal void Signal(short);
  50. /* Returns control to the point of the last CatchSignal/CatchFailures.  The program will
  51.     then behave as though that CatchSignal had returned with the code parameter
  52.     supplied to Signal. If CatchCFailures is catching, the message parameter will be 0. */
  53.         
  54. extern pascal void SignalMessage(short, long);
  55. /* Returns control to the point of the last CatchSignal.
  56.     If CatchCFailures is catching, the message parameter will be returned. */
  57.  
  58. extern pascal void CatchCFailures(/* FailInfo *, ProcPtr */);
  59. /* Call this to set up an exception handler. This pushes your handler onto
  60.         a stack of exception handlers. */
  61.  
  62. extern pascal void Failure(short, long);
  63. /* Call this to signal a failure.  Control will branch to the most recent
  64.         exception handler, which will be popped off the handler stack. */
  65.  
  66. extern pascal void Success(FailInfo *);
  67. /* Call this when you want to de-install your exception handler (pop 1
  68.         element off the handler stack). */
  69.